# -*- coding: utf-8 -*-

"""
DateTime   : 2020/12/20 10:38
Author     : ZhangYafei
Description: 名片管理系统
要求实现一个名片管理系统，功能包含添加、删除、修改、查询（根据姓名）一个名片、查询所有名片、退出系统6大功能。
名片内容包含姓名、QQ、手机号、家庭地址。
"""
from prettytable import PrettyTable

""" 1. 打印系统菜单 """
print('=' * 30)
print('|', end='')
print('名片管理系统 V1.0'.center(22), end='')
print('|')
print('-' * 30)
print('|', end='  ')
print('    用户操作说明'.ljust(20), end='')
print('|')
print('-' * 30)
print('|', end='  ')
print("1. 添加名片的信息".ljust(19), end='')
print('|')
print('|', end='  ')
print("2. 删除名片的信息".ljust(19), end='')
print('|')
print('|', end='  ')
print("3. 修改名片的信息".ljust(19), end='')
print('|')
print('|', end='  ')
print("4. 查询名片的信息".ljust(19), end='')
print('|')
print('|', end='  ')
print("5. 查询所有名片的信息".ljust(17), end='')
print('|')
print('|', end='  ')
print("6. 打印系统菜单".ljust(20), end='')
print('|')
print('|', end='  ')
print("7. 退出系统".ljust(22), end='')
print('|')
print('=' * 30)

""" 2. 定义名片存储数据结构 """
card_dict = {}
card_dict['张亚飞'] = {'QQ': '1271570224', '微信': '15735177116', '手机号': '15735177116'}
card_dict['关羽'] = {'QQ': '1271570224', '微信': '15735177116', '手机号': '15735177116'}


""" 3. 系统功能实现 """
while True:
    choice = input('请选择您需要执行的操作（Q/q退出,M/m打印菜单）>> ')
    if choice == '1':
        while True:
            name = input('请输入姓名(B/b返回主菜单) >> ')
            if not name:
                print('\033[1;32m', end='')
                print('姓名不能为空，请重新输入')
                print('\033[0m', end='')
                continue
            elif name.lower() == 'b':
                break
            else:
                if name in card_dict:
                    print('\033[1;32m', end='')
                    print(f'对不起，{name} 已经添加过了')
                    print('\033[0m', end='')
                else:
                    qq = input('请输入qq >> ').strip()
                    if not qq:
                        print('\033[1;32m', end='')
                        print('QQ不能为空，请重新输入')
                        print('\033[0m', end='')
                        continue
                    wechat = input('请输入微信 >> ').strip()
                    if not wechat:
                        print('\033[1;32m', end='')
                        print('微信不能为空，请重新输入')
                        print('\033[0m', end='')
                        continue
                    phone = input('请输入手机号 >> ').strip()
                    if not phone:
                        print('\033[1;32m', end='')
                        print('手机号不能为空，请重新输入')
                        print('\033[0m', end='')
                        continue
                    card_dict[name] = {'QQ': qq, '微信': wechat, '手机号': phone}
                    print('\033[1;32m', end='')
                    print(f'{name} 的名片信息添加成功!')
                    print('\033[0m', end='')
                    break
    elif choice == '2':
        name = input('请输入您要删除名片信息的姓名 >> ')
        print('\033[1;32m', end='')
        if name not in card_dict:
            print(f'对不起，{name}的名片信息不存在!')
            continue
        del card_dict[name]
        print(f'{name} 名片信息删除成功！')
    elif choice == '3':
        while True:
            name = input('请输入您要修改名片信息的姓名(B/b返回上一级) >> ')
            if not name:
                print('\033[1;32m', end='')
                print('姓名不能为空，请重新输入')
                print('\033[0m', end='')
                continue
            elif name.lower() == 'b':
                break
            else:
                print('\033[1;32m', end='')
                if name not in card_dict:
                    print(f'对不起，{name}的名片信息不存在!')
                    print('\033[0m', end='')
                    continue
                print('查询到的名片信息为：')
                print('\033[1;31m', end='')
                table = PrettyTable(['姓名', 'QQ', '微信', '手机号'])
                table.add_row([name, card_dict[name]['QQ'], card_dict[name]['微信'], card_dict[name]['手机号']])
                print(table)
                print('\033[0m', end='')
                while True:
                    mod_field = input('请输入要修改的字段(B/b返回上一级) >> ')
                    if mod_field.lower() == 'b':
                        break
                    if mod_field not in card_dict[name] and mod_field != '姓名':
                        print('\033[1;32m', end='')
                        print('您输入的字段不存在，请重新输入！')
                        print('\033[0m', end='')
                        continue
                    new_value = input('请输入该字段的新值 >> ')
                    if mod_field == '姓名':
                        card_dict[new_value] = card_dict[name]
                        del card_dict[name]
                        name = new_value
                    else:
                        card_dict[name][mod_field] = new_value
                    print('\033[1;32m', end='')
                    print(f'{name} 的 {mod_field} 修改成功！', end='')
                    print('\033[0m')
                break
    elif choice == '4':
        name = input('请输入您要查询名片信息的姓名(B/b返回上一级) >> ')
        print("\033[1;32m", end='')
        if name not in card_dict:
            print(f'对不起，{name}的名片信息不存在!')
            continue
        print('查询到的名片信息为：')
        print("\033[1;31m", end='')
        table = PrettyTable(['姓名', 'QQ', '微信', '手机号'])
        table.add_row([name, card_dict[name]['QQ'], card_dict[name]['微信'], card_dict[name]['手机号']])
        print(table)
        # print('姓名'.ljust(10) + 'QQ'.ljust(13) + '微信'.ljust(14) + '手机号'.ljust(14))
        # print(f'{name.ljust(10)}{card_dict[name]["QQ"].ljust(13)}{card_dict[name]["微信"].ljust(14)}{card_dict[name]["手机号"].ljust(14)}')
    elif choice == '5':
        print('\033[1;32m', end='')
        print(f'共查询到 {len(card_dict)} 条记录，查询结果如下：')
        print('\033[1;31m', end='')
        table = PrettyTable(['姓名', 'QQ', '微信', '手机号'])
        for name in card_dict:
            table.add_row([name, card_dict[name]['QQ'], card_dict[name]['微信'], card_dict[name]['手机号']])
        print(table)
        # print('姓名'.ljust(10) + 'QQ'.ljust(13) + '微信'.ljust(14) + '手机号'.ljust(14))
        # for name in card_dict:
        #     print(f'{name.ljust(10)}{card_dict[name]["QQ"].ljust(13)}{card_dict[name]["微信"].ljust(14)}{card_dict[name]["手机号"].ljust(14)}')
    elif choice.lower() == 'm':
        print('=' * 38)
        print('|', end='')
        print('欢迎使用名片管理系统V0.1'.center(29), end='')
        print('|')
        print('-' * 38)
        print('|', end='')
        print('\t\t\t用户操作说明'.ljust(24), end='')
        print('|')
        print('-' * 38)
        print('|', end='')
        print("\t\t1. 添加名片的信息".ljust(26), end='')
        print('|')
        print('|', end='')
        print("\t\t2. 删除名片的信息".ljust(26), end='')
        print('|')
        print('|', end='')
        print("\t\t3. 修改名片的信息".ljust(26), end='')
        print('|')
        print('|', end='')
        print("\t\t4. 查询名片的信息".ljust(26), end='')
        print('|')
        print('|', end='')
        print("\t\t5. 查询所有名片的信息".ljust(24), end='')
        print('|')
        print('|', end='')
        print("\t\t6. 退出系统".ljust(28), end='')
        print('|')
        print('=' * 38)
    elif choice.lower() == 'q':
        print('感谢使用，欢迎下次再来！')
        break
    else:
        print('您的选择有误，请重新选择！')
    print('\033[0m', end='')

def add_student():
    pass


def modify_student():
    pass


def query_students():
    pass

def delete_stduent():
    pass


def main():
    while True:
        choice = input()
        if choice == '1':
            add_student()
        elif choice == '2':
            modify_student()
        elif choice == '3':
            delete_stduent()
        elif choice == '4':
            query_students()
        else:
            break



main()
